#pragma once


#ifdef E2D_BUILD_TRANS
#include "e2d/core/trans/components.h"
#endif
#ifdef E2D_BUILD_RENDER
#include "e2d/core/render/components.h"
#endif
#ifdef E2D_BUILD_AUDIO
#include "e2d/core/audio/components.h"
#endif
#ifdef E2D_BUILD_PHYSICS
#include "e2d/core/physics/components.h"
#endif
#ifdef E2D_BUILD_FUI
#include "e2d/core/fui/components.h"
#endif


#include "e2d/core/Type.h"

#include "e2d/core/impl/MonoScripts.h"
#include "e2d/core/impl/Prefeb.h"

#include "e2d/core/Entity.h"

namespace e2d
{
	namespace impl
	{

		struct Components
		{
            static std::vector<std::string> m_Labels;

			static bool AddComponent(e2d::Entity* entity, const ComponentType& type);

			static bool CopyComponents(const e2d::Entity* source, e2d::Entity* target);
		};
	};

	struct Components
	{
		static bool AddComponent(e2d::Entity* entity, const ComponentType& type);

		static void CopyEntity(const e2d::Entity* source, e2d::Entity* target, bool copyPositionData = false);

		static bool CopyEntityComponents(const e2d::Entity* source, e2d::Entity* target, bool copyPositionData = false);

	};
}
